MATLAB 求函数极值的内置函数一览表(实则优化算法函数汇总) |
您所在的位置:网站首页 › 利用二阶导数求函数极值 matlab › MATLAB 求函数极值的内置函数一览表(实则优化算法函数汇总) |
MATLAB 求函数极值的内置函数一览表
收集了几乎所有的 MATLAB 内置的优化函数,可收藏,需要时查阅。 文章目录 MATLAB 求函数极值的内置函数一览表简介概览求函数极值(或最大值最小值)求零点(解方程)最小二乘问题 求极值fminbnd:单变量fmincon:约束、非线性、多变量fminunc:无约束、多变量fminsearch:无约束、多变量、无导数linprog:线性规划quadprog:二次规划fminimax:minmax 问题fgoalattain:目标达到fseminf:半无限约束、非线性、多变量patternsearch:模式搜索ga:遗传算法gamultiobj:遗传算法、帕累托前沿simulannealbnd:模拟退火 求零点fsolve:非线性、方程组fzero:非线性函数求根 最小二乘lsqlin:约束、线性最小二乘问题lsqnonlin:非线性最小二乘问题lsqcurvefit:非线性拟合lsqnonneg:最小二乘问题,非负 最后的讨论 简介优化问题主要包括三个方面:求一个函数的最大值最小值、求函数零点(解方程)、最小二乘问题。这三个问题,本质上看,是一个问题。求极值,就相当于是找导函数的零点。解方程,如果把右端项挪到左边去,本质上也是求函数的零点。最小二乘问题,是一个最小化残值范数的求极值问题,求极值问题,本质是求零点问题。 因此,所有的优化问题,本质就是在解方程,无可厚非。我们再把求极值问题细分一下,如果是带约束的,一般叫约束优化问题,如果不带约束的,一般叫无约束优化问题。如果是线性的优化问题,我们也叫线性规划。如果是非线性的优化问题,我们也叫非线性规划。如此,就把带或者不带约束的求函数极值细化成了最优化与运筹的问题。 我给的标题是,MATLAB 求函数极值的内置函数一览表,这个标题写得不是特别确切。第一,因为下面的内容还包括求零点和最小二乘。第二,求极值在印象里似乎就是求一个函数的最“低”点最“高”点,很少会和约束条件扯上关系,所以不谈规划问题或者说优化问题,似乎有失偏颇。但是,和很多工科的同学聊天,他们似乎并不在意你这个东西叫什么,他给你的问题就是找自变量最小化一个函数,管你是非线性规划,还是无约束优化,能把他的问题解决就好了,并不太在意你的工具叫什么。潜意识里,他们认为 “能抓住老鼠的才是好猫”,你给他们扯优化,扯规划,他们反而并不能很好地理解。所以,我给出这个 “函数极值” 的说法,就很亲民了,更加容易让被人搜索到,从而进来查阅和学习。 相关的数学原理和别的延伸的一些东西在这篇博文中不解释,如有兴趣,请参考我其他的文章,链接如下。 数据科学和机器学习中的优化理论与算法(上) 数据科学和机器学习中的优化理论与算法(下) 共轭梯度(CG)算法 共轭梯度方法(CG)MATLAB编程及其和Gauss_Seidel方法的一个比较 Jacobi迭代、Gauss_Seidel迭代和最佳因子SOR迭代的比较 交替方向乘子法(ADMM)的数学基础 方程组求解的直接法与迭代法实现 分布式优化和去中心化优化概述 图像与视频处理中的优化方法 约束优化问题的罚函数求解方法 粒子群优化算法与遗传脚本 求解非约束优化问题的拟牛顿方法(BFGS、DFP) 从矩阵乘法来看-O优化和ijk执行顺序对程序性能的影响 使用MATLAB 进行非线性拟合 遗传算法程序示例 BP神经网络代码示例 方程组求解的切比雪夫半迭代加速方法 使用BP神经网络做预测 数学建模模拟退火法MATLAB程序参考模板 机器学习算法概括 最优控制与深度学习 函数型数据主成分分析(FPCA) 信赖域狗腿(dogleg)方法 函数型数据主成分分析 浅谈大数据和深度学习和计算数学的一点关系 用深度学习求解高维偏微分方程 A*算法:Dijkstra改进算法 深度学习中的一些基本概念 PCA算法的数学推导及其简单算例 keras入门实例:非线性拟合求拟合系数 自然语言处理之情感分析实战(分类问题) 求极小值的线搜索方法应用(SD,Newton) Matlab使用的一点小体会(不定时扩充修缮,琐碎东西存档) 解方程组的列主元高斯消元法和Cholesky分解 matlab偏最小二乘法及其检验 Cache 结构对程序性能的影响 机器学习入门实战——使用回归技术预测房价 matlab做三维线性拟合(多元线性回归,准确来说不叫插值) 基于主元素思想的Householder正交法解(矛盾)方程组 R语言做回归分析 DEA(数据包络分析)程序模板 从几个lingo的示例来看lingo在运筹学当中的使用 matlab入门练习之杂例二 一个DEA程序模板 matlab中fmincon函数的使用 概览我把我能想到的 MATLAB 中这类优化问题相关的函数都列举如下,后面我会一一进行解释。如果有遗漏的,欢迎大家在评论区补充。以下的分类只是我的臆想,前面说了,这三类问题,可以互相转化,所以不要太在意分类的问题。 求函数极值(或最大值最小值)fminbnd fmincon(interior-point、trust-region-reflective、sqp、sqp-legacy、active-set) fminunc(quasi-newton、trust-region) fminsearch fminimax linprog(dual-simplex、interior-point-legacy、interior-point) quadprog(interior-point-convex、trust-region-reflective、active-set) fgoalattain fseminf patternsearch 求零点(解方程) fsolve(trust-region-dogleg、trust-region、levenberg-marquardt)fzerogagamultiobjsimulannealbnd 最小二乘问题 lsqcurvefit(trust-region-reflective、levenberg-marquardt)lsqlin(interior-point、trust-region-reflective、active-set)lsqnonlin (trust-region-reflective、levenberg-marquardt)lsqcurvefitIsqnonneg 求极值 fminbnd:单变量查找单变量函数在定区间上的最小值 用法示例: fun = @sin; x1 = 0; x2 = 2*pi; x = fminbnd(fun,x1,x2)这个函数可以自定义。 fmincon:约束、非线性、多变量寻找约束非线性多变量函数的最小值。非线性规求解器。求次下问题的最小值: min x f ( x ) such that { c ( x ) ≤ 0 c e q ( x ) = 0 A ⋅ x ≤ b A e q ⋅ x = b e q l b ≤ x ≤ u b , \min _{x} f(x) \text { such that }\left\{\begin{aligned} c(x) & \leq 0 \\ c e q(x) &=0 \\ A \cdot x & \leq b \\ A e q \cdot x &=b e q \\ l b & \leq x \leq u b, \end{aligned}\right. xminf(x) such that ⎩⎪⎪⎪⎪⎪⎪⎨⎪⎪⎪⎪⎪⎪⎧c(x)ceq(x)A⋅xAeq⋅xlb≤0=0≤b=beq≤x≤ub, 用法示例: fun = @(x)100*(x(2)-x(1)^2)^2 + (1-x(1))^2; x0 = [-1,2]; A = [1,2]; b = 1; x = fmincon(fun,x0,A,b)算法选择 fmincon 有五个算法选项: ‘interior-point’(默认值)‘trust-region-reflective’‘sqp’‘sqp-legacy’‘active-set’‘interior-point’ 处理大型稀疏问题以及小型稠密问题。该算法在所有迭代中都满足边界,并且可以从 NaN 或 Inf 结果中恢复。‘sqp’ 在所有迭代中都满足边界。该算法可以从 NaN 或 Inf 结果中恢复。‘sqp-legacy’ 类似于 ‘sqp’,但通常速度更慢且占用的内存更多。‘active-set’ 可以采用大步长,从而提高速度。该算法对一些具有非平滑约束的问题很有效。 ‘trust-region-reflective’ 要求您提供梯度,并且只允许边界或线性等式约束,但不能同时使用两者。在这些限制下,该算法可以高效处理大型稀疏问题和小型稠密问题。该算法可以使用特殊方法来节省内存使用量,例如 Hessian 矩阵乘法函数。 fminunc:无约束、多变量求无约束多变量函数的最小值。 用法示例: fun = @(x)3*x(1)^2 + 2*x(1)*x(2) + x(2)^2 - 4*x(1) + 5*x(2); x0 = [1,1]; [x,fval] = fminunc(fun,x0)算法选择 fminunc 有两种算法: ‘quasi-newton’(默认值)‘trust-region’如果您的目标函数包括梯度,请使用 ‘Algorithm’ = ‘trust-region’,并将 SpecifyObjectiveGradient 选项设置为 true。否则,请使用 ‘Algorithm’ = ‘quasi-newton’。 fminsearch:无约束、多变量、无导数使用无导数法计算无约束多变量函数的最小值。 用法示例: fun = @(x)100*(x(2) - x(1)^2)^2 + (1 - x(1))^2; x0 = [-1.2,1]; x = fminsearch(fun,x0) linprog:线性规划求解线性规划问题。求以下问题的最小值: min x f T x such that { A ⋅ x ≤ b , A e q ⋅ x = b e q , l b ≤ x ≤ u b . \min _{x} f^{T} x \text { such that }\left\{\begin{aligned} A \cdot x & \leq b, \\ A e q \cdot x &=b e q, \\ l b & \leq x \leq u b . \end{aligned}\right. xminfTx such that ⎩⎪⎨⎪⎧A⋅xAeq⋅xlb≤b,=beq,≤x≤ub. 用法示例: A = [1 1 1 1/4 1 -1 -1/4 -1 -1 -1 -1 1]; b = [2 1 2 1 -1 2]; f = [-1 -1/3]; x = linprog(f,A,b)线性规划指的是约束是线性的,目标函数也是线性的。 算法选择 linprog 有三种算法: ‘dual-simplex’,默认值‘interior-point-legacy’‘interior-point’首先使用 ‘dual-simplex’ 算法或 ‘interior-point’ 算法。通常,‘dual-simplex’ 和 ‘interior-point’ 算法速度快且占用的内存最少。‘interior-point-legacy’ 算法类似于 ‘interior-point’,但 ‘interior-point-legacy’ 可能速度较慢、稳健性较差或占用内存较多。 quadprog:二次规划二次规划。quadprog 求由下式指定的问题的最小值 min x 1 2 x T H x + f T x such that { A ⋅ x ≤ b , A e q ⋅ x = b e q , l b ≤ x ≤ u b . \min _{x} \frac{1}{2} x^{T} H x+f^{T} x \text { such that }\left\{\begin{aligned} A \cdot x \leq b, \\ A e q \cdot x &=b e q, \\ l b & \leq x \leq u b . \end{aligned}\right. xmin21xTHx+fTx such that ⎩⎪⎨⎪⎧A⋅x≤b,Aeq⋅xlb=beq,≤x≤ub. 用法示例: H = [1 -1; -1 2]; f = [-2; -6]; A = [1 1; -1 2; 2 1]; b = [2; 2; 3]; [x,fval,exitflag,output,lambda] = ... quadprog(H,f,A,b);算法选择 quadprog 有三种算法: ‘interior-point-convex’(默认值)‘trust-region-reflective’‘active-set’如果您遇到凸问题,或不知道您的问题是否为凸问题,请使用 ‘interior-point-convex’。当您的 Hessian 矩阵 H 包含大量非零项时,为了获得更好的性能,请将 H 指定为普通的双精度矩阵。同样,为了在 H 的非零项相对较少时获得更好的性能,请将 H 指定为稀疏矩阵。如果您的非凸问题只有边界或只有线性等式约束,请使用 ‘trust-region-reflective’。如果您有具有大量线性约束而没有大量变量的半正定问题,请尝试 ‘active-set’。 fminimax:minmax 问题求解 minimax 约束问题。 用法示例: t = linspace(-pi,pi); plot(t,sin(t),'r-') hold on plot(t,cos(t),'b-'); plot(t,max(sin(t),cos(t)),'ko') legend('sin(t)','cos(t)','max(sin(t),cos(t))','Location','NorthWest') fun = @(x)[sin(x);cos(x)]; x0 = 1; x1 = fminimax(fun,x0) x0 = -2; x2 = fminimax(fun,x0) fgoalattain:目标达到求解涉及多目标的目标达到问题。fgoalattain 求解目标达到问题,这是多目标优化问题最小化的一种表示。fgoalattain 求以下问题的最小值: minimize x , γ γ such that { F ( x ) − weight ⋅ γ ≤ goal c ( x ) ≤ 0 c e q ( x ) = 0 A ⋅ x ≤ b Aeq ⋅ x = beq l b ≤ x ≤ u b . \underset{x, \gamma}{\operatorname{minimize}} \gamma \text { such that }\left\{\begin{aligned} F(x)-\text { weight } \cdot \gamma & \leq \text { goal } \\ c(x) & \leq 0 \\ c e q(x) &=0 \\ A \cdot x & \leq b \\ \text { Aeq } \cdot x &=\text { beq } \\ l b & \leq x \leq u b . \end{aligned}\right. x,γminimizeγ such that ⎩⎪⎪⎪⎪⎪⎪⎪⎪⎪⎨⎪⎪⎪⎪⎪⎪⎪⎪⎪⎧F(x)− weight ⋅γc(x)ceq(x)A⋅x Aeq ⋅xlb≤ goal ≤0=0≤b= beq ≤x≤ub. 用法示例: fun = @(x)[2+(x-3)^2;5+x^2/4]; goal = [3,6]; weight = [1,1]; x0 = 1; x = fgoalattain(fun,x0,goal,weight) fun(x) fseminf:半无限约束、非线性、多变量求解半无限约束多变量非线性函数的最小值。求以下问题的最小值: min x f ( x ) such that { A ⋅ x ≤ b , A e q ⋅ x = b e q , l b ≤ x ≤ u b , c ( x ) ≤ 0 , c e q ( x ) = 0 , K i ( x , w i ) ≤ 0 , 1 ≤ i ≤ n . \min _{x} f(x) \text { such that }\left\{\begin{aligned} A \cdot x & \leq b, \\ A e q \cdot x &=b e q, \\ l b & \leq x \leq u b, \\ c(x) & \leq 0, \\ c e q(x) &=0, \\ K_{i}\left(x, w_{i}\right) & \leq 0,1 \leq i \leq n . \end{aligned}\right. xminf(x) such that ⎩⎪⎪⎪⎪⎪⎪⎪⎪⎪⎨⎪⎪⎪⎪⎪⎪⎪⎪⎪⎧A⋅xAeq⋅xlbc(x)ceq(x)Ki(x,wi)≤b,=beq,≤x≤ub,≤0,=0,≤0,1≤i≤n. 用法示例: objfun = @(x)(x-1)^2; x0 = 0.2; ntheta = 1; x = fseminf(objfun,x0,ntheta,@seminfcon) function [c, ceq, K1, s] = seminfcon(x,s) % No finite nonlinear inequality and equality constraints c = []; ceq = []; % Sample set if isnan(s) % Initial sampling interval s = [0.01 0]; end t = 0:s(1):1; % Evaluate the semi-infinite constraint K1 = (x - 0.5) - (t - 0.5).^2; end patternsearch:模式搜索使用模式搜索寻找最小值。 用法示例: fun = @psobj; x0 = [0,0]; x = patternsearch(fun,x0) function y = psobj(x) y = exp(-x(1)^2-x(2)^2)*(1+5*x(1) + 6*x(2) + 12*x(1)*cos(x(2))); ga:遗传算法使用遗传算法找函数的最小值。 用法示例: xi = linspace(-6,2,300); yi = linspace(-4,4,300); [X,Y] = meshgrid(xi,yi); Z = ps_example([X(:),Y(:)]); Z = reshape(Z,size(X)); surf(X,Y,Z,'MeshStyle','none') colormap 'jet' view(-26,43) xlabel('x(1)') ylabel('x(2)') title('ps\_example(x)') rng default % For reproducibility x = ga(@ps_example,2) gamultiobj:遗传算法、帕累托前沿使用遗传算法找到多个适应度函数的帕累托前沿。 用法示例: fitnessfcn = @(x)[norm(x)^2,0.5*norm(x(:)-[2;-1])^2+2]; rng default % For reproducibility x = gamultiobj(fitnessfcn,2); plot(x(:,1),x(:,2),'ko') xlabel('x(1)') ylabel('x(2)') title('Pareto Points in Parameter Space') simulannealbnd:模拟退火使用模拟退火法找到函数的最小值。 用法示例: dejong5fcn fun = @dejong5fcn; x0 = [0 0]; x = simulannealbnd(fun,x0) 求零点 fsolve:非线性、方程组非线性方程组求解器。 用法示例: fun = @root2d; x0 = [0,0]; x = fsolve(fun,x0) function F = root2d(x) F(1) = exp(-exp(-(x(1)+x(2)))) - x(2)*(1+x(1)^2); F(2) = x(1)*cos(x(2)) + x(2)*sin(x(1)) - 0.5;算法选择 fsolve 有三种算法: ‘trust-region-dogleg’(默认值)‘trust-region’‘levenberg-marquardt’‘trust-region-dogleg’ 是唯一专门设计为用于求解非线性方程的算法。其他算法尝试最小化函数的平方和。‘trust-region’ 算法对稀疏问题有效。对于大规模问题,它可以使用特殊方法,如 Jacobian 矩阵乘法函数。 fzero:非线性函数求根非线性函数的根。 用法示例: fun = @sin; % function x0 = 3; % initial point x = fzero(fun,x0) 最小二乘 lsqlin:约束、线性最小二乘问题求解约束线性最小二乘问题。具有边界或线性约東的线性最小二乘求解器。求解以下形式的最小二乘曲线拟合问题 min x 1 2 ∥ C ⋅ x − d ∥ 2 2 such that { A ⋅ x ≤ b , A e q ⋅ x = b e q , l b ≤ x ≤ u b . \min _{x} \frac{1}{2}\|C \cdot x-d\|_{2}^{2} \text { such that }\left\{\begin{aligned} A \cdot x & \leq b, \\ A e q \cdot x &=b e q, \\ l b & \leq x \leq u b . \end{aligned}\right. xmin21∥C⋅x−d∥22 such that ⎩⎪⎨⎪⎧A⋅xAeq⋅xlb≤b,=beq,≤x≤ub. 用法示例: C = [0.9501 0.7620 0.6153 0.4057 0.2311 0.4564 0.7919 0.9354 0.6068 0.0185 0.9218 0.9169 0.4859 0.8214 0.7382 0.4102 0.8912 0.4447 0.1762 0.8936]; d = [0.0578 0.3528 0.8131 0.0098 0.1388]; A = [0.2027 0.2721 0.7467 0.4659 0.1987 0.1988 0.4450 0.4186 0.6037 0.0152 0.9318 0.8462]; b = [0.5251 0.2026 0.6721]; x = lsqlin(C,d,A,b)算法选择 lsqlin 有三种算法: ‘interior-point’,默认值‘trust-region-reflective’‘active-set’首先尝试 ‘interior-point’。当您的输入矩阵 C 包含大量非零项时,为了获得更好的性能,请将 C 指定为普通的双精度矩阵。同样,为了在 C 的非零项相对较少时获得更好的性能,请将 C 指定为稀疏矩阵。如果您没有约束或只有边界约束,并且需要更高的准确度、更快的速度或要使用 Jacobian Multiply Function with Linear Least Squares,请尝试 ‘trust-region-reflective’。如果您有大量的线性约束而没有大量的变量,请尝试 ‘active-set’。 lsqnonlin:非线性最小二乘问题求解非线性最小二乘(非线性数据拟合)问题。求解具有以下形式的非线性最小二乘曲线拟合问题 min x ∥ f ( x ) ∥ 2 2 = min x ( f 1 ( x ) 2 + f 2 ( x ) 2 + … + f n ( x ) 2 ) \min _{x}\|f(x)\|_{2}^{2}=\min _{x}\left(f_{1}(x)^{2}+f_{2}(x)^{2}+\ldots+f_{n}(x)^{2}\right) xmin∥f(x)∥22=xmin(f1(x)2+f2(x)2+…+fn(x)2) 用法示例: rng default % for reproducibility d = linspace(0,3); y = exp(-1.3*d) + 0.05*randn(size(d)); fun = @(r)exp(-d*r)-y; x0 = 4; x = lsqnonlin(fun,x0)lsqnonlin有两种算法: ‘trust-region-reflective’(默认值)‘levenberg-marquardt’通常,先尝试 ‘trust-region-reflective’。如果您的问题有边界,您必须使用 ‘trust-region-reflective’。如果您的问题没有边界并且欠定(方程数少于维数),请使用 ‘levenberg-marquardt’。 lsqcurvefit:非线性拟合用最小二乘求解非线性曲线拟合(数据拟合)问题。 用法示例: xdata = ... [0.9 1.5 13.8 19.8 24.1 28.2 35.2 60.3 74.6 81.3]; ydata = ... [455.2 428.6 124.1 67.3 43.2 28.1 13.1 -0.4 -1.3 -1.5]; fun = @(x,xdata)x(1)*exp(x(2)*xdata); x0 = [100,-1]; x = lsqcurvefit(fun,x0,xdata,ydata)算法选择 lsqcurvefit 有两种算法: ‘trust-region-reflective’(默认值)‘levenberg-marquardt’通常,先尝试 ‘trust-region-reflective’。如果您的问题有边界,您必须使用 ‘trust-region-reflective’。如果您的问题没有边界并且欠定(方程数少于维数),请使用 ‘levenberg-marquardt’。 lsqnonneg:最小二乘问题,非负求解非负线性最小二乘问题。求解文下形式的非负最小二乘曲线拟合问题 KaTeX parse error: Can't use function '$' in math mode at position 33: …t x-d\|_{2}^{2}$̲, where $x \geq… 用法示例: C = [0.0372 0.2869 0.6861 0.7071 0.6233 0.6245 0.6344 0.6170]; d = [0.8587 0.1781 0.0747 0.8405]; x = lsqnonneg(C,d) xunc = C\d constrained_norm = norm(C*x - d) unconstrained_norm = norm(C*xunc - d) 最后的讨论撤了这么多不相干的,好,现在回归正题,MATLAB 如何求极值?这么多函数选择哪一个呢? 单变量问题直接用 fminbnd。线性规划用 linprog。二次规划用 quadprog。其他约束规划用 fmincon。特殊的问题,用 fminimax、fgoalattain、fseminf、patternsearch、ga、gamultiobj、simulannealbnd。fminunc::无约束、多变量。fminsearch:无约束、多变量、无导数。 我自以为是地画图,如下所示。图画得很辛苦,支持的老铁给个点赞收藏关注三连。 是 否 否 是 线性规划 二次规划 其他 否 是 否 是 是否特定问题 其他 minmax 半无限约束 目标达到 遗传,模拟退火,模式搜索 是否单变量 是否有约束 规划问题 linprog quadprog fmincon 是否有导数 fminunc fminsearch fminbnd |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |